const express = require('express');
const proxy = require('express-http-proxy');
const cors = require('cors');  // 引入 cors 中间件
const https = require('https'); // 引入 https 模块
const fs = require('fs'); // 引入 fs 模块来读取证书文件
const app = express();

// 配置代理目标地址
const BASE_URL = 'https://ark.cn-beijing.volces.com';    //这里设置你的远程服务器地址
const PORT = 3000;

// 读取 SSL 证书和私钥
const privateKey = fs.readFileSync('path/to/private-key.key', 'utf8');
const certificate = fs.readFileSync('path/to/certificate.crt', 'utf8');
const ca = fs.readFileSync('path/to/ca.pem', 'utf8'); // 如果有中间证书的话

// 配置证书
const credentials = { key: privateKey, cert: certificate, ca: ca };

// 使用 CORS 中间件，放在代理之前
app.use(cors({
    origin: '*',  // 允许所有来源的跨域请求
    methods: ['GET', 'POST', 'PUT', 'DELETE'],  // 允许的请求方法
    allowedHeaders: ['Content-Type', 'Authorization'],  // 允许的请求头
}));

// 使用 express-http-proxy 来代理请求
app.use(
    '/node', // 代理的路径前缀
    proxy(BASE_URL, {
        proxyReqPathResolver: (req) => {
            const newPath = req.url.replace(/^\/node/, '/api/v3/chat/completions');
            console.log(`${req.method}: ${BASE_URL}${newPath}`);
            console.log(`----`);

            return newPath;
        },
        proxyReqOptDecorator: (proxyReqOpts, srcReq) => {
            console.log(`参数:${JSON.stringify(srcReq.query)}`)
            // 设置请求超时时间 (毫秒)
            proxyReqOpts.timeout = 5000; // 5秒超时
            return proxyReqOpts;
        },

        timeout: 5000, // 响应超时设置 (7秒)
    })
);

// 启动 HTTPS 服务器
https.createServer(credentials, app).listen(PORT, () => {
    console.log(`代理服务器已启动，正在监听端口 https://localhost:${PORT}`);
});
